package com.pai4j.remote.pgc;

import com.pai4j.common.bean.PAIPageResponseBeanUtil;
import com.pai4j.common.bean.PAIResponseBean;
import com.pai4j.domain.vo.request.creator.ApplyCreatorRequestVO;
import com.pai4j.domain.vo.request.creator.AuditCreatorRequestVO;
import com.pai4j.domain.vo.request.creator.UpdateCreatorRequestVO;
import com.pai4j.domain.vo.response.creator.CreatorAuditRecordResponseVO;
import com.pai4j.domain.vo.response.creator.CreatorBaseResponseVO;
import com.pai4j.domain.vo.response.creator.CreatorDetailResponseVO;
import com.pai4j.domain.vo.response.creator.CreatorStatisticsResponseVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 创作者服务Feign客户端
 * 提供创作者相关的远程调用接口
 *
 * @author: CYM-pai
 * @date: 2025/11/01
 */
@FeignClient(name = "pai4j-pgc-service", contextId = "creatorClient")
public interface CreatorClient {
    
    /**
     * 申请成为创作者
     *
     * @param request 申请请求
     * @return 申请结果
     */
    @PostMapping("/pgc-service/creator/apply")
    PAIResponseBean<Boolean> applyCreator(@RequestBody @Validated ApplyCreatorRequestVO request);
    
    /**
     * 获取创作者详情
     *
     * @param userId 用户ID
     * @return 创作者详情
     */
    @GetMapping("/pgc-service/creator/info/{userId}")
    PAIResponseBean<CreatorDetailResponseVO> getCreatorInfo(@PathVariable("userId") String userId);
    
    /**
     * 更新创作者信息
     *
     * @param request 更新请求
     * @return 更新结果
     */
    @PostMapping("/pgc-service/creator/update")
    PAIResponseBean<Boolean> updateCreator(@RequestBody @Validated UpdateCreatorRequestVO request);
    
    /**
     * 审核创作者申请（管理员）
     *
     * @param request 审核请求
     * @return 审核结果
     */
    @PostMapping("/pgc-service/creator/audit")
    PAIResponseBean<Boolean> auditCreator(@RequestBody @Validated AuditCreatorRequestVO request);
    
    /**
     * 分页查询创作者（按状态）
     *
     * @param status 状态：0-待审核 1-已通过 2-已拒绝 3-已禁用
     * @param pageNo 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    @GetMapping("/pgc-service/creator/page")
    PAIResponseBean<PAIPageResponseBeanUtil<List<CreatorBaseResponseVO>>> pageCreators(
            @RequestParam(value = "status", required = false) Integer status,
            @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
            @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize);
    
    /**
     * 获取创作者排行榜（按经验值）
     *
     * @param pageNo 页码
     * @param pageSize 每页大小
     * @return 分页结果
     */
    @GetMapping("/pgc-service/creator/ranking")
    PAIResponseBean<PAIPageResponseBeanUtil<List<CreatorBaseResponseVO>>> getCreatorRanking(
            @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
            @RequestParam(value = "pageSize", defaultValue = "20") Integer pageSize);
    
    /**
     * 禁用创作者
     *
     * @param userId 用户ID
     * @param operator 操作人
     * @return 操作结果
     */
    @PostMapping("/pgc-service/creator/disable/{userId}")
    PAIResponseBean<Boolean> disableCreator(
            @PathVariable("userId") String userId,
            @RequestParam("operator") String operator);
    
    /**
     * 启用创作者
     *
     * @param userId 用户ID
     * @param operator 操作人
     * @return 操作结果
     */
    @PostMapping("/pgc-service/creator/enable/{userId}")
    PAIResponseBean<Boolean> enableCreator(
            @PathVariable("userId") String userId,
            @RequestParam("operator") String operator);
    
    /**
     * 获取创作者审核记录
     *
     * @param userId 用户ID
     * @return 审核记录列表
     */
    @GetMapping("/pgc-service/creator/audit-records/{userId}")
    PAIResponseBean<List<CreatorAuditRecordResponseVO>> getAuditRecords(@PathVariable("userId") String userId);
    
    /**
     * 获取创作者统计信息
     *
     * @param userId 用户ID
     * @return 统计信息
     */
    @GetMapping("/pgc-service/creator/statistics/{userId}")
    PAIResponseBean<CreatorStatisticsResponseVO> getCreatorStatistics(@PathVariable("userId") String userId);
    
    /**
     * 增加创作者经验值
     *
     * @param userId 用户ID
     * @param points 经验值
     * @return 操作结果
     */
    @PostMapping("/pgc-service/creator/add-experience")
    PAIResponseBean<Boolean> addExperience(
            @RequestParam("userId") String userId,
            @RequestParam("points") Integer points);
    
    /**
     * 更新创作者信用分
     *
     * @param userId 用户ID
     * @param scoreDelta 信用分变化值（可以是负数）
     * @return 操作结果
     */
    @PostMapping("/pgc-service/creator/update-credit-score")
    PAIResponseBean<Boolean> updateCreditScore(
            @RequestParam("userId") String userId,
            @RequestParam("scoreDelta") Integer scoreDelta);
    
    /**
     * 增加文章数
     *
     * @param userId 用户ID
     * @return 操作结果
     */
    @PostMapping("/pgc-service/creator/increase-article-count")
    PAIResponseBean<Boolean> increaseArticleCount(@RequestParam("userId") String userId);
    
    /**
     * 增加粉丝数
     *
     * @param userId 用户ID
     * @param count 变化数量（可以是负数）
     * @return 操作结果
     */
    @PostMapping("/pgc-service/creator/increase-follower-count")
    PAIResponseBean<Boolean> increaseFollowerCount(
            @RequestParam("userId") String userId,
            @RequestParam("count") Integer count);
    
    /**
     * 增加收益
     *
     * @param userId 用户ID
     * @param amount 金额（单位：分）
     * @return 操作结果
     */
    @PostMapping("/pgc-service/creator/add-income")
    PAIResponseBean<Boolean> addIncome(
            @RequestParam("userId") String userId,
            @RequestParam("amount") Long amount);
}

